恭喜你看到這裡!今天是鐵人賽的最後一天,我們要來回顧這 30 天的旅程,同時展望這個 LINE 訂單系統的未來可能性。
回顧第一天,我們從一個單純的想法出發:
「能不能讓中小企業不用架設複雜網站,就能在 LINE 上接單?」
30 天後的今天,我們真的做到了。讓我們用一張圖來總結整個系統:
| 功能模組 | 完成項目 | 涵蓋天數 |
|---|---|---|
| 基礎架構 | LINE OA、Messaging API、Node.js + Express | Day 1-7 |
| 訂單流程 | Flex Message 選單、多步驟下單、MongoDB 寫入 | Day 8-11 |
| 通知機制 | 管理者群組推播、顧客查詢、雙向通知 | Day 12-14, 23-25 |
| 表單體驗 | LIFF 訂單表單、Rich Menu 綁定 | Day 15-16 |
| 後台管理 | Admin Dashboard、JWT 驗證、CORS 處理 | Day 17-20 |
| 效能優化 | Redis 快取、佇列機制、錯誤處理 | Day 21-22 |
| 商業功能 | 金流串接(綠界)、Webhook 整合、重試機制 | Day 27-29 |
| 監控維運 | Logging、健康檢查、DLQ 管理 | Day 29 |
我們學會了:
核心價值:讓顧客在最熟悉的平台完成下單,零學習成本。
我們建立了完整的 RESTful API:
// 訂單相關
POST /orders // 建立訂單
GET /orders // 查詢訂單列表(管理員)
GET /orders/:id // 查詢單筆訂單
GET /orders/latest // 查詢使用者最新訂單
PATCH /orders/:id/status // 更新訂單狀態
// 認證相關
POST /auth/admin/login // 管理員登入
// 金流相關
POST /payment/create // 建立付款
POST /payment/webhook // 接收付款回調
// 監控相關
GET /healthz // 健康檢查
GET /healthz/queues // 佇列統計
核心價值:分離責任、易於擴充、便於測試。
我們設計了兩個核心 Model:
User Model(使用者)
{
lineUserId: String, // LINE 使用者 ID
name: String,
phone: String,
createdAt: Date
}
Order Model(訂單)
{
userId: ObjectId, // 關聯到 User
items: [{
productName: String,
quantity: Number,
price: Number
}],
status: String, // Pending/In Progress/Completed/Failed
pickup: String, // 自取/外送/宅配
payment: {
tradeNo: String,
status: String,
amount: Number,
paidAt: Date
},
createdAt: Date,
updatedAt: Date
}
核心價值:清晰的資料結構是系統穩定的基礎。
我們經歷了三個階段:
階段一:In-Memory(Day 10)
const userState = {
[userId]: { item, price, quantity, step }
};
階段二:Redis State(Day 21)
await redis.set(`user:${userId}:state`, JSON.stringify(state), { EX: 600 });
階段三:Redis Queue + Worker(Day 22-24)
// Producer
await redis.rPush(QUEUE_KEY, JSON.stringify(task));
// Worker
const result = await redis.blPop(QUEUE_KEY, 5);
核心價值:根據需求選擇合適的方案,不過度設計。
我們建立了完整的容錯機制:
三層佇列系統
健康檢查
GET /healthz
{
"status": "healthy",
"checks": {
"mongodb": "ok",
"redis": "ok",
"worker": "ok"
}
}
錯誤通知
核心價值:讓系統在生產環境更穩定可靠。
這個系統可以應用在:
從 MVP 到商業化,這裡是一些可能的發展方向:
1. 完善商品管理
// 目前:商品寫死在程式碼
// 未來:建立 Product Model
{
name: String,
price: Number,
category: String,
imageUrl: String,
stock: Number, // 庫存管理
isAvailable: Boolean // 上下架控制
}
2. 會員系統
3. 優惠券與促銷
{
code: String, // 優惠碼
type: String, // 折扣/折價/免運
value: Number,
minAmount: Number, // 最低消費
validFrom: Date,
validTo: Date
}
4. 報表與分析
1. 多店家支援(SaaS 化)
// 新增 Store Model
{
storeId: String,
storeName: String,
lineChannelId: String,
owner: ObjectId,
subscription: {
plan: String, // Free/Basic/Premium
expiresAt: Date
}
}
2. 進階金流整合
3. 物流整合
4. LINE 進階功能
1. AI 智能助理
// 自然語言處理
"我要兩杯大杯紅茶拿鐵,一杯半糖去冰"
↓ NLP 解析
{
items: [{
product: "紅茶拿鐵",
size: "大杯",
sugar: "半糖",
ice: "去冰",
quantity: 2
}]
}
2. 智能推薦系統
3. 跨平台整合
4. 區塊鏈溯源(食品安全)
老實說,這個系統還有很多可以優化的地方:
現況:幾乎沒有自動化測試
改進:
// 單元測試(Jest)
describe('Order API', () => {
it('should create order with valid payload', async () => {
const res = await request(app)
.post('/orders')
.send({ lineUserId: 'U123', items: [...] });
expect(res.status).toBe(200);
expect(res.body.success).toBe(true);
});
});
// E2E 測試(Cypress)
cy.visit('/liff-form')
cy.get('#product').select('紅茶拿鐵')
cy.get('#quantity').type('2')
cy.get('button[type="submit"]').click()
cy.contains('訂單已送出')
現況:純 JavaScript,容易出錯
改進:
// 使用 TypeScript
interface Order {
userId: string;
items: OrderItem[];
status: OrderStatus;
payment?: PaymentInfo;
}
type OrderStatus = 'Pending' | 'In Progress' | 'Completed' | 'Failed';
現況:基本驗證
改進:
現況:單機運行
改進:
orderSchema.index({ userId: 1, createdAt: -1 });
orderSchema.index({ 'payment.tradeNo': 1 });
現況:基本 Log
改進:
回顧這 30 天,有些經驗想跟大家分享:
一開始我們的訂單流程很簡單,甚至狀態管理用的是 in-memory。但這不代表它沒價值,反而是快速驗證想法的好方法。
建議:
我一開始沒有認真寫 API 文件,到後面自己都搞不清楚哪個 endpoint 該傳什麼參數。
建議:
我曾經想「要不要一開始就做 microservices?」、「要不要用 GraphQL?」
但其實 Monolith + REST API 就夠用了,等真的遇到瓶頸再重構。
建議:
用 ngrok 讓朋友或家人實際操作,你會發現很多意想不到的問題:
建議:
技術會進步、需求會改變、LINE API 也會更新(像 LIFF 建立方式就改過)。
建議:
30 天前,我們從一個想法開始:
「能不能讓中小企業不用架設複雜網站,就能在 LINE 上接單?」
30 天後,答案是:能!
我們不只做出了 MVP,還整合了金流、建立了後台、設計了容錯機制。更重要的是,我們證明了:
技術不應該是中小企業數位轉型的障礙,而是助力。
這個系統還不完美,但它是個起點。希望這 30 天的分享,能幫助到:
如果你跟著做下來,恭喜你!你已經有能力:
✅ 設計並實作完整的訂單系統
✅ 串接 LINE Messaging API
✅ 建立 LIFF 表單提升 UX
✅ 整合第三方金流(綠界)
✅ 處理非同步任務與錯誤重試
✅ 建立基本的監控與日誌系統
感謝你看到這裡!
特別感謝:
另外,今天剛好參加了 2025 Hello World Dev Conference,真的感謝 iThome 舉辦的這麼好,光是體驗完第一天就獲益良多!
如果你有任何問題、建議,或想討論合作:
也歡迎分享你的實作成果,我很期待看到這個系統被應用在真實場景!
回顧這 30 天,真的是充實又有挑戰。從一開始的專案規劃、中間的技術踩坑、到最後的系統整合,每一步都是學習。
最大的收穫不只是技術本身,而是:
如何把一個模糊的想法,變成可運作的系統。
這個過程中,我學會了:
如果你也想做 Side Project,我的建議是:
Just Start.
不用等「最佳時機」,不用等「完美計畫」。
先做出能動的東西,然後一步步改進。
30 天很短,但足夠證明你的決心。
30 天也很長,長到可以完成一個有意義的專案。
這裡整理了這 30 天用到的所有官方文件與工具:
LINE 官方
金流整合
後端技術
工具
如果用一句話總結這 30 天:
「從 Hello World 到能收單、能付款、能通知的完整系統」
這不只是技術的學習,更是產品思維的訓練。
希望這個系列能幫助你:
30 天,我們做到了!
Day 30 完
2025 iThome 鐵人賽完賽 🎉